package com.cskaoyan.javase.exception._1handle._0default;

/**
 * @description: 异常的默认处理
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 在java中异常的最小处理单位是方法,方法会产生异常,也能处理异常,还能抛出异常
 * java异常的默认处理机制:
 *      1.默认处理指的是不写任何与异常处理相关的代码,不考虑异常处理,异常最终会抛给JVM,然后JVM做默认处理
 *      2.编译时异常必须在程序的编译时期明确的处理它,不需要默认处理机制,默认处理针对运行时异常
 *
 * java当中默认的异常处理机制:
 *      如果错误产生在main方法中
 *   - 当我们的代码执行到错误行数之前，代码是正常执行的
 *   - 当我们的代码执行到错误行数时，JVM会终止程序的执行，抛出一个该异常信息封装成的对象
 *   - 将该对象中的异常信息，打印到控制台上，告诉程序员发生了什么问题
 *   - 发生错误之后的语句，都不执行了
 *
 * - 如果错误产生在main方法当中的另一个方法中
 *   - 当程序执行到该方法的错误行数时，JVM会终止程序的执行
 *     - 向上给方法的调用者抛出一个该异常信息封装成的对象
 *   - 一直向上抛出，直到抛给main方法，main方法最终抛给JVM
 *   - 发生异常之前的语句正常执行，但是之后的语句都不执行了
 *
 * 总结,程序抛出运行时异常,最终会抛给JVM,然后JVM终止程序执行,在控制台打印报错信息
 * 默认的异常处理机制满足不了需求,需要手动处理异常
 *
 */
public class Demo {
    public static void main(String[] args) {
        //Demo d = new Demo();
        //d = null;
        System.out.println("before");
        //System.out.println(d.toString());
        test();
        System.out.println("after");
    }

    private static void test() {
        System.out.println("before");
        test2();
        System.out.println("after");
    }

    private static void test2() {
        System.out.println("before");
        //test3();
        System.out.println("after");
    }

   /* private static void test3() {
        System.out.println("before");
        System.out.println(10/0);
        System.out.println("after");
    }*/

    private static void test4() {
        System.out.println("before");
        System.out.println(10 / 0);
        System.out.println("after");
    }


}
